export {};

// 栈： 先进后出， 后进先出。

class Stack<T> {
  list: T[] = [];

  // 入栈
  push(value: T) {
    return this.list.push(value);
  }
  // 出栈
  pop() {
    return this.list.pop() as T;
  }

  // 获取指定的数据
  splice(index: number, len: number) {
    // const 总截取长度 = 总长度 - 下标
    // const 后截取个数  = 总截取长度 - 截取个数len
    const totalLen = this.list.length - index;
    const count = totalLen - len;

    // 临时存储容器
    const tempArr: T[] = [];
    for (let i = 0; i < count; i++) {
      tempArr.unshift(this.list.pop() as T);
    }
    // 结果容器
    const resultArr: T[] = [];
    for (let i = 0; i < len; i++) {
      resultArr.unshift(this.list.pop() as T);
    }
    // 放回临时数据
    tempArr.forEach(v => {
      this.list.push(v)
    })
    return resultArr
  }
}

const t = new Stack<number>();

t.push(1);
t.push(2);
t.push(3);
t.push(4);
t.push(5);
t.push(6);
t.push(7);
t.push(8);

const result = t.splice(3, 5);
console.log(t, result)


//  ['A', 'B', 'C', 'D', 'E', 'F', 'G']   length
//    0    1    2    3    4    5    6        7

//        下标1  切1  后截取5                  7

//        下标1  切3  后截取3                  7

//

// 下标   总长度

// const 总截取长度 = 总长度 - 下标

// const 后截取个数  = 总截取长度 - 截取个数len
